package lock;

/*
 * 当线程A获取锁1之后，线程B也获取了锁2
 * 这时线程A又开始获取锁2（嵌套获取），线程B又想获取锁1（嵌套1获取），
 * 这种情况下线程A会等着线程B释放锁2，线程B会等着线程A释放锁1，然后就会形成了死锁。
 * */
public class DeadThreadA implements Runnable {

    private String lock1;
    private String lock2;

    public DeadThreadA(String lock1, String lock2) {
        this.lock1 = lock1;
        this.lock2 = lock2;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (lock1) {
                System.out.println("A:lock1正在运行.....");
                synchronized (lock2) {
                    System.out.println("A:lock2继续运行.....");
                }
            }
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
